import fetch from 'dva/fetch';

function parseJSON(response) {
  return response.json();
}

function checkStatus(response) {
  if (response.status >= 200 && response.status < 300) {
    return response;
  }

  const error = new Error(response.statusText);
  error.response = response;
  throw error;
}

/**
 * Requests a URL, returning a promise.
 *
 * @param  {string} url       The URL we want to request
 * @param  {object} [options] The options we want to pass to "fetch"
 * @return {object}           An object containing either "data" or "err"
 */
export default async function request(url, options) {
  const defaultOpts = {
    credentials: 'include',
    headers: {
      "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
      "x-token": "7b7be3d5-ae08-4172-b9cb-4ecf4ac1daec"
    }
  };
  const response = await fetch(url, {...defaultOpts, ...options});

  checkStatus(response);

  const data = await response.json();

  const reVal = {
    headers: {},
    data
  }

  if (response.headers.get("x-total-count")) {
    reVal.headers["x-total-count"] = response.headers.get("x-total-count");
  }

  return reVal;
}
